<?php	

abstract class Conexion 
{
    protected static $_configuracion;
    protected static $_conexion;
    protected static $_sql;
	protected static $_sentencia;
	protected static $_campos;
    protected static $_origen;
	protected static $_usuario;
	protected static $_clave;
	
	protected static function conectar()
    { 
		try
		{
			if(file_exists(ARCHIVO))
			{
				self::$_configuracion=parse_ini_file(ARCHIVO,true);
				try
				{
					self::$_conexion= new PDO (self::$_configuracion[MODO]['ORIGEN'],self::$_configuracion[MODO]['USUARIO'],self::$_configuracion[MODO]['CLAVE']);
					self::$_conexion->setAttribute(PDO::ERRMODE_WARNING,PDO::ERRMODE_EXCEPTION);
				}
				catch (PDOException $pdo)
				{
				    self::$_conexion=null;
					print "Error: No se ha podido establecer la conexion con la base de datos";
					exit();
				}
			}
			else
            {
				throw new Exception ('No se puede abrir el archivo de configuracion');
			}			
		}
		catch (Exception $ini)
		{
				print "Error: ".$ini->getMessage();
				exit();
		}
        		
	}	
   
    protected static function finalizar()
    {
	   self::$_conexion=null;
	   self::$_sentencia=null;
	}
	
    protected static function preparar() 
    {
		self::$_sentencia=self::$_conexion->prepare(self::$_sql); 
    } 

	protected static function vincular()
	{ 
	   foreach(self::$_campos as $atributo => $valor )
	   {   
	       self::$_sentencia->bindValue(':'.$atributo,$valor, self::tipo($valor) );
	   }
	}
	 	 
	protected static function ejecutar()
	{
	   self::$_sentencia->execute();
	}
	
	protected static function tipo($valor) 
	{
		if ( is_int($valor) ) 
		{
			return PDO::PARAM_INT;
		}
		if ( is_bool($valor) ) 
	    {
			return PDO::PARAM_BOOL;
		}
		if ( is_null($valor) ) 
	    {
			return PDO::PARAM_NULL;
		}
		if (is_float($valor))
		{
			return PDO::PARAM_STR;
		}
		
	}
}

?>


